package com.octopus.core.matcher;

import java.util.regex.Pattern;

/**
 * 正则表达式匹配器
 *
 * @author shoulai.yang@gmail.com
 * @date 2019/07/31
 */
public class RegexMatcher implements Matcher<String> {

  /** 正则表达式 */
  private Pattern pattern;

  /**
   * 正则表达式匹配器
   *
   * @param pattern 正则表达式
   */
  public RegexMatcher(String pattern) {
    this.pattern = Pattern.compile(pattern);
  }

  /**
   * 正则表达式匹配器
   *
   * @param pattern 正则表达式
   */
  public RegexMatcher(Pattern pattern) {
    this.pattern = pattern;
  }

  @Override
  public final boolean matches(String obj) {
    return this.pattern.matcher(obj).matches();
  }

  @Override
  public int hashCode() {
    return this.pattern.pattern().hashCode();
  }

  @Override
  public boolean equals(Object obj) {
    return this.pattern.pattern().equals(obj);
  }

  /**
   * 新建匹配器
   *
   * @param pattern 表达式
   * @return 匹配器
   */
  public static RegexMatcher of(String pattern) {
    return new RegexMatcher(pattern);
  }

  /**
   * 新建匹配器
   *
   * @param pattern 表达式
   * @return 匹配器
   */
  public static RegexMatcher of(Pattern pattern) {
    return new RegexMatcher(pattern);
  }
}
